home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 145
/
Gekkan Dennou Club - 2000.6 Vol. 145 (Japan).7z
/
Gekkan Dennou Club - 2000.6 Vol. 145 (Japan) (Track 1).bin
/
tools
/
sharp
/
sxwork3.lzh
/
サンプル実用編
/
チャート
/
CHFILE.C
< prev
next >
Wrap
Text File
|
1994-03-10
|
6KB
|
179 lines
/******************************************************************************
* chfile.c: ファイルのロード処理関数
******************************************************************************
* Workroom SX-68K Sample Program Copyright 1994 SHARP
*/
#include <stdio.h>
#include <string.h>
#include <doslib.h>
#include <dialog.h> /* ダイアログマンを利用するときに必要 */
#include <task.h> /* タスクマンを利用するときに必要 */
#include "chart.h" /* このプログラム固有のヘッダファイル */
#include "csfile.h" /* 小遣い帳データファイルのヘッダファイル */
/******************************************************************************
* loadFile(): 指定の日付のデータをファイルから読み込む
******************************************************************************
* 引数: ComVal *pcv 共通変数へのポインタ
* int month 月
* int day 日
* int *tMoney 金額を格納するポインタ
* 戻り値: BOOLEAN = TRUE: 読み込み成功
* = FALSE: 読み込み失敗
*/
BOOLEAN loadFile(ComVal *pcv, int month, int day, int *tMoney)
{
int i, errCode, len;
short sp;
short index[512]; /* データの位置テーブル */
FILE *hFile; /* ファイルハンドル */
KZDATA kzBuff; /* ファイル1レコードバッファ */
/* ドライブを読み込みモードでチェック */
errCode = checkDrive(pcv->fileName, 1);
if (errCode < 0) {
if (errCode == -4)
/* ファイルが見付からない場合 */
DMError(D_CONFIRM, "データファイルが見付かりません。");
return FALSE; /* 読み込みが行えない場合 */
}
/* ファイルをオープンする */
hFile = fopen(pcv->fileName, "rb");
if (hFile == NULL) {
/* ファイルがオープンできない */
for (i = 0; i < 7; i++)
tMoney[i] = 0;
DMError(D_CONFIRM, "ファイルがオープンできません。");
return FALSE;
}
fseek(hFile, 0,SEEK_SET);
len = fread(index, sizeof(short), 512, hFile);
if (len != 512) {
DMError(D_CONFIRM, "データファイルの構造が異常です。");
fclose(hFile);
return FALSE;
}
/* 指定の日付までのシーク位置を求める */
sp = index[(month - 1) * 32 + (day - 1)];
if (sp == -1) {
/* データ新規作成 */
for (i = 0; i < 7; i++)
tMoney[i] = 0;
fclose(hFile);
return TRUE;
}
sp *= sizeof(KZDATA);
if (fseek(hFile, sp + 1024, SEEK_SET)) {
/* データ位置までシークできない */
DMError(D_CONFIRM, "データファイルの構造が異常です。");
fclose(hFile);
return FALSE;
}
/* データの読み込み */
len = fread((unsigned char *) &kzBuff, sizeof(KZDATA), 1, hFile);
if (len != 1) {
/* 読み込みエラーの場合 */
DMError(D_CONFIRM, "ファイルの読み込みに失敗しました。");
for (i = 0; i < 7; i++)
tMoney[i] = 0;
fclose(hFile);
return FALSE;
}
/* バッファ内のデータをデュープする */
for (i = 0; i < 7; i++)
tMoney[i] = kzBuff.money[i];
/* ファイルをクローズする */
fclose(hFile);
return TRUE;
}
/******************************************************************************
* readTable(): データファイル内の位置テーブルを読み出す
******************************************************************************
* 引数: ComVal *pcv 共通変数へのポインタ
* 戻り値: BOOLEAN = TRUE: 読み込み成功
* = FALSE: 読み込み失敗
* 注釈:
* 小遣い帳データの配置情報のテーブルをデータファイルより読み出します。
*/
BOOLEAN readTable(ComVal *pcv, short *index)
{
int errCode, len;
FILE *hFile;
/* ドライブを読み込みモードでチェック */
errCode = checkDrive(pcv->fileName, 1);
if (errCode < 0) {
if (errCode == -4)
DMError(D_CONFIRM, "データファイルが存在しません。");
return FALSE; /* 読み込みが行えない場合 */
}
/* ファイルをオープンする */
hFile = fopen(pcv->fileName, "rb");
if (hFile == NULL) {
/* ファイルがオープンできない */
DMError(D_CONFIRM, "ファイルがオープンできません。");
return FALSE;
}
len = fread(index, sizeof(short), 512, hFile);
if (len != 512) {
DMError(D_CONFIRM, "データファイルの構造が異常です。");
fclose(hFile);
return FALSE;
}
fclose(hFile);
return TRUE;
}
/******************************************************************************
* checkDrive(): 指定ファイル名のドライブをチェック
******************************************************************************
* 引数: char *fname ファイル名へのポインタ
* int mode 検査するモード
* = 0: 書き込み
* = 1: 読み込み
* 戻り値: int >= 0: 読み込み成功
* = -1: ファイル名が正しくない
* = -2: ドライブの準備ができていない
* = -3: 書き込み禁止がされている
* = -4: ファイルが存在しない
*/
int checkDrive(char *fname, int mode)
{
int stat, errCode;
struct NAMECKBUF nminf;
char filbuf[TS_NAMEMAX];
/* 入力されたファイル名を分解・検査 */
stat = NAMECK((unsigned char *) fname, &nminf);
if (stat != 0) {
DMError(D_CONFIRM, "ファイル名が正しくありません。");
return -1;
}
/* フルパス名を作成する */
strmfn(fname, (char *) nminf.drive, (char *) nminf.path, (char *) nminf.name, (char *) nminf.ext);
/* 指定ファイル名のドライブの状態を取得する */
stat = TSDrvctrl(0, nminf.drive[0] & 0x1f);
/* ドライブが準備されているかをチェックする */
if ((stat & 0x06) != 0x02) {
DMError(D_CONFIRM, "ドライブの準備ができていません。");
return -2;
}
/* プロテクトされているかどうかをチェックする */
if (mode == 0 && (stat & 0x0a) == 0x0a) {
DMError(D_CONFIRM, "ライトプロテクトされています。\r"
"書き込みを行うことができません。");
return -3;
}
/* ファイルの存在のチェック */
errCode = TSFiles(filbuf, fname, TS_ARCH);
if (errCode < 0)
/* ファイルの新規作成をする場合を考えて、エラーダイアログは出さない */
return -4;
return 0;
}